/**
 * 在Java中，类（Class）是一种引用类型，它代表了类的元数据信息。你可以像使用自定义类型一样使用类本身，这通常涉及到以下几个方面：

    1. **类字面量**：
    - 类字面量是指向类对象的引用，可以通过类名直接访问。例如，`String.class`和`Integer.TYPE`都是类字面量。

    2. **反射（Reflection）**：
    - 反射是Java中一个强大的特性，允许程序在运行时查询和使用类的信息。通过反射，你可以获取类名、访问权限、字段、方法、构造函数等信息，甚至可以创建对象实例和调用方法。
    - 使用`java.lang.reflect`包中的类和接口，如`Class`、`Field`、`Method`、`Constructor`等。

    3. **类加载器（ClassLoader）**：
    - 类加载器负责将.class文件加载到JVM中，并且每个类都有一个与之关联的类加载器。你可以使用类加载器来动态加载和卸载类。
    - 可以通过调用`Class.forName(String className)`来加载一个类。

    4. **泛型（Generics）**：
    - 泛型允许你定义类型参数化的类和接口，这样可以在编写代码时不必指定具体的类型，而是在声明时指定。
    - 例如，`List<String>`是一个泛型类，它指定了列表中元素的类型为`String`。

    5. **注解（Annotations）**：
    - 注解是一种特殊的接口，它可以用来标记类、方法、变量等元素。注解可以包含元数据，这些元数据可以在编译时、运行时被读取和使用。
    - 例如，`@Override`、`@Deprecated`等都是Java内置的注解。

    6. **枚举（Enums）**：
    - 枚举是一种特殊的类，它可以用来定义一组常量。枚举类型是固定不变的，并且每个枚举常量都是其类的实例。
    - 枚举类型可以有自己的字段、方法和构造函数。

    7. **内部类（Inner Classes）**：
    - 内部类是定义在另一个类中的类。它与外部类共享属性和方法，并且可以访问外部类的成员，包括私有成员。
    - 内部类可以是静态的（不依赖于外部类的实例）或非静态的（依赖于外部类的实例）。

    8. **接口（Interfaces）**：
    - 接口是一种特殊的引用类型，它可以定义一组抽象方法。接口可以被类实现，实现类必须提供接口中所有方法的具体实现。
    - 从Java 8开始，接口可以包含默认方法和静态方法。

    9. **异常（Exceptions）**：
    - 异常是Java中处理错误的一种机制。异常类是`Throwable`类的子类，可以用来表示程序运行时的错误情况。
    - 异常可以被捕获和处理，或者向上抛出，由调用者处理。

    通过上述方式，Java中的类可以像自定义类型一样被使用，提供了强大的灵活性和功能。

*/

public class MyPhoneMaker {
    public static void main(String[] args) {
        Phone phone = new Phone();

        phone.hasFigurePrintUnlocker = true;
        phone.price = 1999;
        phone.screen = new Screen();

        phone.screen.producer = "京东方";
        phone.screen.size = 8.8;


        CPU cpu = new CPU();
        cpu.producer = "三星";
        cpu.speed = 3.5;

        Memory memory = new Memory();
        memory.producer = "三星";
        memory.capacity = 4;

        Storage storage = new Storage();
        storage.producer = "Intel";
        storage.capacity = 128;

        phone.mainboard = new Mainboard();

        phone.mainboard.cpu = cpu;
        phone.mainboard.memory = memory;
        phone.mainboard.storage = storage;

        phone.mainboard.model = "EA888";
        phone.mainboard.year = 2019;

        phone.prePhone = new Phone();
    }
}
